﻿%Chap02-Preparing a New Partition
%UTF8
%
\chapter{准备新分区}
\section{介绍}
在这一章中，我们会准备用于支持LFS系统的分区。我们会创建分区，在其上创建文件系统，并且进行挂载。

\section{创建新分区}
像许多其他操作系统一样，LFS一般安装在专用分区上。我们建议构建LFS系统的方法是使用一个空分区，或者在你拥有足够未分区空间的情况下，创建一个分区。

最小化的系统需要一个1.3GB左右的分区。这足够存放所有的源代码包和编译的包。如果打算把LFS系统作为主要Linux系统的话，可能需要2-3GB额外的空间来安装其它的软件。LFS系统本身不会占据这么多的空间。需要这么多空间的一个主要原因是提供足够的空闲临时存储。编译包时可能需要许多磁盘空间，这部分空间在安装完成后会进行回收。

有时候编译过程可能没有足够的内存来，所以，使用一个小的磁盘分区作为交换空间不失为一个好办法。内存会把最不常用的数据存储到交换分区，而留下更多的内存给活动进程。LFS系统的 \verb|swap| 分区可以与主机系统使用同一个，因此，并不需要额外进行创建。

启动一个磁盘分区工具（比如 \textbf{cfdisk} 或者 \textbf{fdisk}），后跟要创建分区的磁盘名称的命令行参数，比如 \verb|/dev/hda| 就是主 IDE 磁盘。创建一个Linux本地分区以及  \verb|swap| 分区（如果必要的话）。如果你还不知道如何使用这些命令，那么请参考 \verb|cfdisk(8)| 或者 \verb|fdisk(8)|。

记住新分区的名称（比如 \verb|hda5|）。本书的后续章节将会用其代指LFS分区。同时也需要记住 \verb|swap| 分区的名称。后续的 \verb|/etc/fstab| 文件中会用到这些名字。

\subsection{其他分区问题}
LFS邮件列表中经常被问到问题就是关于系统分区的建议。这个问题的答案因人而异。大部分发行版本的默认策略是使用这个驱动器，除了一小部分作为交换分区。从一些角度考虑，对LFS来说，这并不是最佳的方案。它减少了系统的灵活性，并且使得跨越不同的分发版本或者LFS构建之间共享数据变得困难，备份数据也更加消耗时间，而且还会因为分配无效的系统结构而蓝非磁盘空间。
\subsubsection{根分区}
对大部分系统来说，为LFS系统的根分区（不要误解为/root目录）分配10GB的空间是一个不错的方案。这样就能够提供足够的空间来构建LFS以及BLFS的大部分内容，而且因为空间较小，因此也便于创建测试使用的多个分区。
\subsubsection{交换分区}
大部分的分发版本会自动创建交换分区。通常情况下，建议的交换分区大小是系统物理内存的2倍（虽然觉得多数情况下并不需要这么大）。如果系统磁盘空间有限，那么可以设置交换分区为2GB，并且监控系统磁盘交换的总量。

磁盘交换从来都不是好事情。通常情况下，通过监听磁盘的活动以及观察系统对命令的响应就可以分辨系统是否正在进行交换。发生交换时，第一个反应应该是检查是否执行了不正常的命令，比如试图编辑一个5GB大小的文件。如果交换发生的很频繁，最好的解决方案就是购买更多的内存。
\subsubsection{常用分区}
有一些分区并不是必须，但是如果是设计一个磁盘结构的话，那么应该一并考虑。下文列出的内容并不全面，但是可以作为指引参考。
\begin{itemize}
\item \verb|/boot| 强烈推荐。使用这个分区来存储内核和其他启动信息。对于较大的磁盘来说，将/boot分区作为第一块磁盘的第一个物理分区，可以最小化潜在的启动风险。这个分区大约需要100M的空间。
\item \verb|/home| 强烈推荐。在多个分发版本或者LFS构建之间共享你的家目录以及用户定制的内容。这个分区一般尽可能的大，视硬盘的剩余空间。
\item /usr 单独的/usr分区通常用来为瘦客户端后者无盘工作站提供服务。正常情况下，这个分区对于LFS并不需要。5GB左右的空间就可以处理大部分的安装。
\item /opt 这个目录在构建BLFS时特别有用。这时大部分的像Gnome和KDE一样的较大包的安装就可以在/opt下进行，而不需要内嵌在在/usr的层次结构下。如果使用的话，5~10GB的空间通常就足够了。
\item /tmp 单独的/tmp目录并不多见，但是如果是配置一个瘦客户端的话就很有用了。如果使用这个分区的话，那么通常大小不需要超过2GB。
\item /usr/src 这个分区用于为BLFS保存编译源代码文件以及在不同的LFS构建中共享代码。也可以使用该分区来构建BLFS包。30~50GB的大小通常可以提供足够的空间。
\end{itemize}
如果你希望分区在启动时就被自动挂载，那么需要配置/etc/fstab文件。关于如何设置分区的问题，请参考8.2节-“创建/etc/fstab文件”。

\section{在分区上创建一个文件系统}
现在我们已经创建了一个新的空白分区，在其上可以创建文件系统。在Linux世界中，使用的最广泛的文件系统就是ext2（第二扩展文件系统），对于新的高容量硬盘来说，日志文件系统也日渐流行。ext3是ext2的增强，增加了日志兼容的功能，并且与E2fsprogs工具兼容。我们将会创建ext3系统，可以在http://www.linuxfromscratch.org/blfs/view/svn/postlfs/ filesystems. html获得关于创建其他文件系统的信息。

要在LFS分区上创建一个ext3文件系统，执行如下命令：

\begin{lstlisting}
mke2fs -jv /dev/<xxx>
\end{lstlisting}

替换上文中的 \textit{<xxx>} 为你LFS分区中的名称（在我们之前的例子中为hda5）。

\begin{note}
一些主机系统在他们的文件系统创建工具（E2fsprogs）中支持自定义的属性。我们会在第9章讨论，这在启动你的新的LFS系统时会存在问题，因为我们安装的LFS系统的E2fsprogs并不支持这些特性；你可能会得到一个类似于“不支持的文件系统特性，升级你的额fsprogs之类的错误”。要检查你的主机系统是否支持增强的功能，执行如下命令：

\begin{lstlisting}
debugfs -R feature /dev/<xxx>
\end{lstlisting}

如果输出中包含了类似于hasi\_journal，ext\_attr，resize\_inode，resize\_inode，dir\_index，filetype，sparse\_super，large\_file或者needs\_recovery，以及你的主机系统其它的扩展特征。这种情况，为了避免后期的问题，你需要编译普通的E2fsprogs包，然后使用编译好的二进制包并且重新创建LFS挂载点的文件系统。

\begin{lstlisting}
cd /tmp
tar -xzvf /path/to/sources/e2fsprogs-1.41.12.tar.gz
cd e2fsprogs-1.41.12
mkdir -v build
cd build
../configure
make #note that we intentionally don't 'make install' here!
./misc/mke2fs -jv /dev/<xxx>
cd /tmp
rm -rfv e2fsprogs-1.41.12
\end{lstlisting}
\end{note}

如果你使用现有的 \verb|swap| 分区，那么就没有必要重新格式化。如果需要创建一个新的 \verb|swap| 分区，可以使用如下命令：
\begin{lstlisting}
mkswap /dev/<yyy>
\end{lstlisting}

替换上文中的的 \textit{<yyy>} 为你 \verb|swap| 分区的名称。

\section{挂载新分区}
我们现在创建了一个文件系统，接下来需要时这个分区可访问。为了实现这个目的，首先要把分区挂载到选定的挂载点。在这本书的后续内容中，我们假设文件系统的挂载点为 \texttt{/mnt/lfs} ，当然，你可以选择自己的目录。

选择一个挂载点并且把其赋值给 \texttt{LFS} 变量，执行如下命令：

\begin{lstlisting}
export LFS=/mnt/lfs
\end{lstlisting}

接下来，执行如下命令，以创建挂载点并挂载LFS文件系统：

\begin{lstlisting}
mkdir -pv $LFS
mount -v -t ext3 /dev/<xxx> $LFS
\end{lstlisting}

替换上文中的 \textit{<xxx>} 为你LFS分区的标示符。

如果使用了多个LFS分区（比如，一个作为 \verb|/| ，另一个作为 \verb|/usr| ），那么，可以按照如下方式挂载他们：

\begin{lstlisting}
mkdir -pv $LFS
mount -v -t ext3 /dev/<xxx> $LFS
mkdir -v $LFS/usr
mount -v -t ext3 /dev/<yyy> $LFS/usr
\end{lstlisting}

替换上文中的 \textit{<xxx>} 和 \textit{<yyy>} 为合适的名称。

请注意挂载分区时不要指定过于严格的权限（比如 \verb|nosuid|，\verb|nodev|，或者 \verb|noatime| 等选项）。执行不带任何参数的 \textbf{mount} 命令可以查看挂载的LFS分区设置了哪些挂载的选项。如果设置了  \verb|nosuid|，\verb|nodev|，或者 \verb|noatime|，那么需要重新对分区进行挂载。

如果你使用一个 \texttt{swap} 分区，那么，请确保该分区已通过 \textbf{swapon} 命令启用：
\begin{lstlisting}
/sbin/swapon -v /dev/<zzz>
\end{lstlisting}
替换上文中的 \textit{<zzz>} 为你的 \verb|swap| 分区的名称。

现在我们已经创建了可以用于工作的环境，是时候下载要编译的包了。
